const nums = [1, 2, 2, 3, 1, 2, 4, 5, 4, 2, 6];

// Set对象也是可迭代，使它能容易转变为利用扩展（阵列...）运算符
const arr = [...new Set(nums)] // [1, 2, 3, 4, 5, 6]
console.log(arr)

// 查找数组的所有唯一值
const uniqueElementsBy = (arr, fn) =>
	// 用于仅包含每个值的第一次唯一出现的数组 fn
	arr.reduce((acc, v) => {
		if (!acc.some(x => fn(v, x))) acc.push(v);
		return acc;
	}, []);
// 例子
uniqueElementsBy(
	[
		{ id: 0, value: 'a' },
		{ id: 1, value: 'b' },
		{ id: 2, value: 'c' },
		{ id: 1, value: 'd' },
		{ id: 0, value: 'e' }
	],
	// 规则
	(a, b) => a.id == b.id
); // [ { id: 0, value: 'a' }, { id: 1, value: 'b' }, { id: 2, value: 'c' } ]
